package org.baojie.raft.node;

import org.baojie.raft.box.Box;
import org.baojie.raft.node.type.Role;

// 抽象数据类型 node 的内核
public interface CoreInNode {

    // 获取 core 与 外界互动的媒介
    Box box();

    // 角色
    Role role();

    // 名称
    NodeName name();

    // 开始运行
    void start();

    // 结束运行
    void stop();

    enum Meta {

        // 等待心跳的最大最小时间
        // 心跳超时触发选举
        min_elc_time(6000),
        max_elc_time(9000),

        // 发送心跳的最大最小时间
        min_heart_time(1600),
        max_heart_time(5600),

        // 日志同步的时间周期
        log_first_delay(6000),
        log_dura_delay(9000);

        private final int millis;

        Meta(int millis) {
            this.millis = millis;
        }

        public int millis() {
            return millis;
        }

    }

}
